package TestesModel;


import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import projeto.model.Musica;

public class TestaMusica {
	private Musica musica;
	private String titulo = "Realidade";
	private String album = "As 20 melhores";
	private String artista = "Catedral";
	private String genero = "Gospel/Religioso";
	private String ano = "2000";
	private String localArmazenado = "./Musicas/Realidade.mp3";
	
	@Before
	public void criaMusica(){
		musica = new Musica(titulo,album,artista,genero,ano,localArmazenado);
	}
	
	@Test
	public void testaCriaMusica(){
		Assert.assertEquals("O titulo nao eh o correto",titulo, musica.getTitulo());
		Assert.assertEquals("O album nao eh o correto",album, musica.getAlbum());
		Assert.assertEquals("O artista nao eh o correto",artista, musica.getArtista());
		Assert.assertEquals("O genero nao eh o correto",genero, musica.getGenero());
		Assert.assertEquals("O ano nao eh o correto",ano, musica.getAno());
		Assert.assertEquals("O local armazenado nao eh o correto",localArmazenado, musica.getLocalArmazenado());
		Assert.assertEquals("A musica nao eh iniciada com zero estrelas",0.0, musica.getEstrelas(),0.05);
		Assert.assertEquals("A musica nao eh iniciada com zero avaliacoes",0, musica.getNumeroDeAvaliadores());
	}
	
	@Test
	public void testaMetodosModificadores(){
		musica.setTitulo("Guarda-me o Deus");
		Assert.assertEquals("O titulo nao eh o correto","Guarda-me o Deus", musica.getTitulo());
		musica.setAlbum("Mais que vencedores");
		Assert.assertEquals("O album nao eh o correto","Mais que vencedores", musica.getAlbum());
		musica.setArtista("Voz da Verdade");
		Assert.assertEquals("O artista nao eh o correto","Voz da Verdade", musica.getArtista());
		musica.setGenero("Gospel");
		Assert.assertEquals("O genero nao eh o correto","Gospel", musica.getGenero());
		musica.setAno("2011");
		Assert.assertEquals("O ano nao eh o correto","2011", musica.getAno());
		musica.setLocalArmazenado("./Musicas/GuardaMeODeus.mp3");
		Assert.assertEquals("O local armazenado nao eh o correto","./Musicas/GuardaMeODeus.mp3", musica.getLocalArmazenado());
	}
	
	@Test
	public void testaAvaliarEmEstrelas() throws Exception{
		try{
			musica.avaliarEmEstrelas(-2);
			Assert.fail("Esperava excecao de valor nao permitido");
		}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Somente é aceito o conceito de 0 a 5", e.getMessage());
    	}
		
		try{
			musica.avaliarEmEstrelas(6);
			Assert.fail("Esperava excecao de valor nao permitido");
		}catch(Exception e){
    		Assert.assertEquals("Mensagem errada", "Somente é aceito o conceito de 0 a 5", e.getMessage());
    	}
		
		musica.avaliarEmEstrelas(5);
		Assert.assertEquals("A musica nao recebeu a avaliacao correta",5, musica.getEstrelas());
		Assert.assertEquals("A musica nao incrementa o numero de avaliacoes correto",1, musica.getNumeroDeAvaliadores());
		musica.avaliarEmEstrelas(2);
		Assert.assertEquals("A musica nao recebeu a avaliacao correta",3, musica.getEstrelas());
		Assert.assertEquals("A musica nao incrementa o numero de avaliacoes correto",2, musica.getNumeroDeAvaliadores());
		musica.avaliarEmEstrelas(2);
		Assert.assertEquals("A musica nao recebeu a avaliacao correta",3, musica.getEstrelas());
		Assert.assertEquals("A musica nao incrementa o numero de avaliacoes correto",3, musica.getNumeroDeAvaliadores());
		musica.avaliarEmEstrelas(2);
		Assert.assertEquals("A musica nao recebeu a avaliacao correta",2, musica.getEstrelas());
		Assert.assertEquals("A musica nao incrementa o numero de avaliacoes correto",4, musica.getNumeroDeAvaliadores());
		musica.avaliarEmEstrelas(5);
		Assert.assertEquals("A musica nao recebeu a avaliacao correta",3, musica.getEstrelas());
		Assert.assertEquals("A musica nao incrementa o numero de avaliacoes correto",5, musica.getNumeroDeAvaliadores());
		
	}
	@Test 
	public void testaReproduzMusica(){
		Assert.assertEquals("Nao reproduz corretamente","Reproduzindo a musica " + titulo, musica.reproduzMusica());
		musica.setTitulo("Guarda-me o Deus");
		Assert.assertEquals("Nao reproduz corretamente","Reproduzindo a musica " + "Guarda-me o Deus", musica.reproduzMusica());
	}
	

}
